package com.repo.logger;

import android.content.Context;
import android.util.Log;

import com.repo.crash.CrashHandler;
import com.repo.utils.DLog;

import java.util.ArrayList;

public class LogManagers {

    public static LogManagers instance = null;

    public static LogManagers getInstance() {
        if (instance == null) {
            instance = new LogManagers();
        }
        return instance;
    }

    public void init(Context context, boolean isDebug) {
        loggerInit(context);
        crashHandlerInit(context);
    }

    //全局闪退日志采集
    public void crashHandlerInit(Context context) {
        CrashHandler.getInstance().init(context);
        Log.e("LogManagers", "CrashHandler init dir is appCache:" + context.getExternalCacheDir().getAbsolutePath() + "/xxx.log");
    }

    /**
     * 日志初始化 基于Timber日志采集以及扩展
     *
     * @param context 上下文
     */
    public void loggerInit(Context context) {
        DLog.Config config = DLog.init(context)
                .setLogSwitch(true)// 设置log总开关，包括输出到控制台和文件，默认开
                .setConsoleSwitch(true)// 设置是否输出到控制台开关，默认开
                .setGlobalTag(null)// 设置log全局标签，默认为空
                // 当全局标签不为空时，我们输出的log全部为该tag，
                // 为空时，如果传入的tag为空那就显示类名，否则显示tag
                .setLogHeadSwitch(false)// 设置log头信息开关，默认为开
                .setLog2FileSwitch(false)// 打印log时是否存到文件的开关，默认关
                .setDir("")// 当自定义路径为空时，写入应用的/cache/log/目录中
                .setFilePrefix("")// 当文件前缀为空时，默认为"alog"，即写入文件为"alog-MM-dd.txt"
                .setBorderSwitch(false)// 输出日志是否带边框开关，默认开
                .setSingleTagSwitch(true)// 一条日志仅输出一条，默认开，为美化 AS 3.1.0 的 Logcat
                .setConsoleFilter(DLog.V)// log的控制台过滤器，和logcat过滤器同理，默认Verbose
                .setFileFilter(DLog.V)// log文件过滤器，和logcat过滤器同理，默认Verbose
                .setStackDeep(10)// log 栈深度，默认为 1
                .setStackOffset(0)// 设置栈偏移，比如二次封装的话就需要设置，默认为 0
                .setSaveDays(7);// 设置日志可保留天数，默认为 -1 表示无限时长
// 新增 ArrayList 格式化器，默认已支持 Array, Throwable, Bundle, Intent 的格式化输出
//                .addFormatter(new DLog.IFormatter<ArrayList>() {
//            @Override
//            public String format(ArrayList list) {
//                return "ALog Formatter ArrayList { " + list.toString() + " }";
//            }
//        });
        DLog.e("日志初始化完成：${}" + config.toString());
    }
}
